import os
import re


def process_files_in_folder(folder_path):
    """
    处理指定文件夹下的所有相关文件，进行键值交换操作并保存结果（覆盖源文件）
    """
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            # 处理单个文件并覆盖保存
            process_single_file(file_path)


def process_single_file(file_path):
    """
    处理单个文件，提取其中的数组数据，交换键值，覆盖源文件保存结果
    """
    # 尝试多种常见编码读取文件，直到成功读取
    encodings_to_try = ['utf-8', 'latin-1']
    content = None
    for encoding in encodings_to_try:
        try:
            with open(file_path, 'r', encoding=encoding) as infile:
                content = infile.read()
            break
        except UnicodeDecodeError:
            continue
    if content is None:
        print(f"无法使用指定编码读取文件 {file_path}，请检查文件编码格式")
        return

    # 提取出字典形式的数据（优化正则表达式以更好处理格式问题，并去除注释）
    match = re.search(r'return \[\s*(.*?)\s*\];', content, re.DOTALL)
    if match:
        data_str = match.group(1).strip()
        # 去除可能存在的单行注释（以//开头的注释）
        data_str = re.sub(r'//.*', '', data_str)
        # 将提取出来的字符串形式的数据转换为字典，优化键值对解析逻辑
        original_dict = {}
        pairs = re.findall(r"('.*?')\s*=>\s*('.*?')", data_str)
        for pair in pairs:
            key = pair[0].strip("'")
            value = pair[1].strip("'")
            original_dict[key] = value

        # 交换字典键值对
        swapped_dict = {v: k for k, v in original_dict.items()}

        # 构建新的内容，严格遵循原文件格式规范进行拼接（这里假设原文件数组元素间换行且缩进格式，可按需调整）
        new_array_elements = [f"'{new_key}' => '{new_value}'" for new_key, new_value in swapped_dict.items()]
        new_array_str = ",\n    ".join(new_array_elements)  # 显式添加逗号来分隔元素，保持原数组格式
        new_content = content[:match.start()] + "return [\n    " + new_array_str + "\n];\n" + content[match.end():]

        # 覆盖源文件保存结果，添加异常处理确保写入完整
        try:
            with open(file_path, 'w', encoding='utf-8') as outfile:
                outfile.write(new_content)
        except Exception as e:
            print(f"写入文件 {file_path} 时出现异常: {e}")
    else:
        print(f"在文件 {file_path} 中未找到合适的数组数据定义")


if __name__ == "__main__":
    target_folder = input("请输入要处理的文件夹路径: ")
    process_files_in_folder(target_folder)
    print("处理完成，已覆盖源文件保存结果。")